package cn.xingzhe.monster.user.domain.repository;

import cn.xingzhe.monster.user.domain.model.PermissionModel;

import java.util.List;
import java.util.Optional;

/**
 * 权限仓储接口
 * 操作领域模型 PermissionModel
 *
 * @author System
 * @version 1.0.0
 * @since 2024-01-01
 */
public interface PermissionRepository {

    /**
     * 根据ID查询权限
     *
     * @param id 权限ID
     * @return 权限领域模型
     */
    Optional<PermissionModel> findById(String id);

    /**
     * 根据权限代码查询权限
     *
     * @param permissionCode 权限代码
     * @return 权限领域模型
     */
    Optional<PermissionModel> findByPermissionCode(String permissionCode);

    /**
     * 根据ID列表查询权限
     *
     * @param ids 权限ID列表
     * @return 权限领域模型列表
     */
    List<PermissionModel> findByIds(List<String> ids);

    /**
     * 保存权限
     *
     * @param permission 权限领域模型
     * @return 保存后的权限领域模型
     */
    PermissionModel save(PermissionModel permission);

    /**
     * 删除权限
     *
     * @param id 权限ID
     */
    void deleteById(String id);

    /**
     * 查询所有权限
     *
     * @return 权限领域模型列表
     */
    List<PermissionModel> findAll();
}

